lib.use(['element', 'form','laydate','table','searchInput','btnProp','tablePlug'], function () {
    var layer = layui.layer;
    var form = layui.form;
    var laydate = layui.laydate;
    var searchInput = layui.searchInput;
    var btnProp = layui.btnProp;
    var formForm = layui.Form('formForm');
    var table = layui.table;
    var tablePlug = layui.tablePlug;//表格插件
    var outLineTable;
    var reqUrl;
    var id;
    table.set(common.layui.table.config(tablePlug));

    //各种控件初始化
    initControl();

    //表单提交方法
    form.on('submit(addFormSubmitFilter)', formSubmit);


    //=====================================================从表==========================================================
    // 渲染从表表格
   outLineTable = table.render({
        elem: '#outLineTable'
        ,toolbar: '#toolbar'
        ,primaryKey: 'id'
        //,where: {orderId:1}
        ,data: []
        ,even: true
        ,defaultToolbar: false
        , cols: [[
            {type:'checkbox'}
            ,{type: 'numbers', title: '编号' }
            ,{ field: 'id',  hide: true }
           ,{ title: '商品ID', field: 'goodsId',hide:true}
            ,{ title: '商品编码', field: 'goodsCode',}
            ,{ title: '商品名称', field: 'goodsName',}
            ,{ title: '商品型号', field: 'goodsModel',}
            ,{ title: '商品规格', field: 'goodsSpec',}
            ,{ title: '基本单位Id', field: 'baseUomId',}
            ,{ title: '基本数量', field: 'baseNum'}
            ,{ title: '基本单位', field: 'baseUomName',}
            ,{ title: '库存单位Id', field: 'qtyUomId',}
            ,{ title: '库存数量', field: 'qtyNum',edit:'number'}
            ,{ title: '库存单位', field: 'qtyUomName',}
            ,{ title: '辅助单位Id', field: 'auxUomId',}
            ,{ title: '辅助数量', field: 'auxNum',edit:'number'}
            ,{ title: '辅助单位', field: 'auxUomName',}
            ,{ title: '商品单价', field: 'goodsPrice',edit:'text'}
            ,{ title: '商品挂牌价', field: 'goodsListPrice',}
            ,{ title: '商品金额', field: 'goodsAmount',}
            ,{ title: '商品折扣', field: 'goodsDiscount',edit:'number'}
            ,{ title: '件换算', field: 'converUnit1',edit:'text'}
            ,{ title: '片换算', field: 'converUnit2',edit:'text'}
            ,{ title: '备注', field: 'remark',edit:'text'}
        ]]
        ,done: function (res, curr, count) {
            layer.closeAll('loading');
        }
    });

    //明细添加按钮
    btnProp.render($.extend(BASE_GOODS_CONFIG_SINGLE,{
        dst: '#add',
        done:function(ck){
            addRowLine(ck.data);
        }
    }));
    //头工具栏事件
    table.on('toolbar(outLineTableFilter)', function(obj){
        var checkStatus = table.checkStatus(obj.config.id);
        if(obj.event=='del'){
            delLine(table.checkStatus('outLineTable'))
        }

    })

    // 监听编辑如果商品数量为非正整数时默认为1 并且弹出提示信息并且重新获得焦点等待输入
    table.on('edit(outLineTableFilter)', rowEditFun);



    /**
     * 页面加载完成调用方法
     * 初始化方法可以写在这里
     */
    (function () {
        id=common.util.getParam('id');
        id?loadFormData(id):addInit();
    })();


//=====================================================各种自定义方法==========================================================


    /**
     * 页面控件初始化
     */
    function initControl() {
            //仓库名称弹出窗口
        searchInput.render($.extend(BASE_WAREHOUSE_CONFIG_SINGLE,{
            dst: '#warehouseNameSearchInput',
            done:function (obj,nextObj,datas) {
                var data={
                    warehouseId:datas[0].id,
                    warehouseCode:datas[0].warehouseCode,
                    warehouseName:datas[0].warehouseName,
                }
                form.val('formForm',data);
            }
        }));

        //填冲下拉框数据字典
        //<select name="dbType" dist-name="sys.Ent_DbTypeEnum" config='{"data": [{"value": "全部","key": "0","index":"2"}],"selectedIndex": "1"}'></select>
        //config:{
        //    data:{[                 自定义下拉框数据
        //          value:'全部',      显示文字
        //          key:0,            值
        //          index:1           当前值需要插入位置(累加完自定义数据后再从下标从0计算)
        //          ]},
        //    selectedIndex:1         当前下拉框默然选中位置（下标从0计算)
        // }
        formForm.selectRender();

        /**
         * Form表单校验
         */
        form.verify({
            outDate: function(value, item){
                if(!value){
                    return '出库日期不能为空';
                }
            },
            warehouseCode: function(value, item){
                if(!value){
                    return '仓库编码不能为空';
                }
            },
            warehouseName: function(value, item){
                if(!value){
                    return '仓库名称不能为空';
                }
            },
        });
    }

    function formSubmit(data) {
        var param = formForm.getData();
        param.outLineEntityList=table.cache['outLineTable'];
        param=beforeSave(param);
        console.log(param)
        common.ajax.post(reqUrl, param, function (resp) {
            afterSave(resp);
            common.util.alert('操作成功', function () {
                common.util.returnWindow('outHeadList.html')
            })
        })
        return false;
    }
    /**
     * 删除明细行
     * @param obj
     */
    function delLine(obj) {
        // 获得当前选中的，不管它的状态是什么？只要是选中的都会获得
        var checkedIds;
        if (outLineTable.config.checkStatus) {
            // 开启了复选状态记忆
            checkedIds = tablePlug.tableCheck.getChecked(outLineTable.config.id);
        } else {
            // 不开启
            checkedIds = table.checkStatus(outLineTable.config.id).data;
        }
        if(checkedIds.length==0)return;
        layer.confirm('确认删除!', function(index){
            tablePlug.del(outLineTable.config.id, checkedIds);
            layer.close(index);
            layer.msg('删除成功！', {icon: 1});
        });
    }




    /**
     * 明细行编辑事件
     * @param obj
     */
    function rowEditFun(obj) {

       /* var that = this;
        var tdElem = $(that).closest('td');
        var field = obj.field;
        var value = obj.value;
        //判断必须为数据才能填写
        if (!common.util.isNumeric(value,3)) {
            setTimeout(function () {
                var objTemp ={};
                objTemp[field] = value;
                obj.update(objTemp);
                tdElem.click();
            }, 200);
        }
        //计算总额
        setTimeout(function () {
            obj.update({goodsAmount:obj.data.baseNum * obj.data.goodsPrice - obj.data.goodsDiscount});
        }, 200);*/

      var converData =  busCommon.conver(obj.data);
      var data = {
          baseNum:converData.baseNum,
          goodsAmount:converData.baseNum*converData.goodsPrice-converData.goodsDiscount

      };
        console.log(data);
        obj.update(data);

    }

    /**
     * 明细行添加后调用方法
     * @param datas
     */
    function addRowLine(_datas) {
        var newDatas=[];
        $.each(_datas,function () {
            //属性更换
            this.goodsId=this.id;
            this.goodsPrice=this.listPrice;
            this.goodsNum=1;
            this.goodsPrice=1;
            this.goodsDiscount=0;
            this.goodsAmount=0;
            this.baseNum=0;



            newDatas.push(this)
        })
        var config=
            {
                table:table,
                tableObj:outLineTable,
                fromPk: "goodsId",
                toPk:"goodsId",
                datas:newDatas,
                done: function (obj,newObj) {
                    obj.goodsNum+=newObj.goodsNum;
                    return obj;
                }
            }
        common.layui.table.addRows(config);
    }
    /**
     * 编辑时加载数据
     */
    function loadFormData(id) {
        common.ajax.get('/inv/outHead/info/'+id, {}, function (resp) {
            formForm.setData(updateInit(resp.outHead));
            common.layui.table.get('outLineTable').load(resp.outHead.outLineEntityList)
            afterLoadFormData(resp.outHead);
        });
    }

    /**
     * 编辑时加载数据
     */
    function afterLoadFormData(outHead) {
        //状态特殊业务时对操作按钮的禁用

        if(outHead.outState==2){
            common.util.disabledBtn("formSubmitBtn");

        }

    }

    /**
     * 新增调用方法
     *
     */
    function addInit() {
        //新增
        reqUrl='/inv/outHead/save';
        //设置新增初始值
        var defVal={
            outDate:common.util.getDate(),
            isValid:1,
            outState:1,
            outType:2,
            //orderDate:common.util.getDate()
        }
        formForm.setData(defVal);
        $('.disabled-row').hide();
    }

    /**
     * 修改调用方法
     * @param data 当前对像参数
     * @returns {*}
     */
    function updateInit(data) {
        reqUrl='/inv/outHead/update';
        //更新时的其它操作
        return data
    }


    /**
     * 保存前调用方法
     * @param param
     * @returns {*}
     */
    function beforeSave(data) {
        //保存前的其它操作
        return data;
    }
    /**
     * 保存后调用方法
     */
    function afterSave(data) {
        //保存后的其它操作
    }
});
